package com.sise.studentInfoSystem.controller;

import com.sise.studentInfoSystem.domain.TStudent;
import com.sise.studentInfoSystem.mapper.StudentMapper;
import com.sise.studentInfoSystem.util.CheckCodeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author zzp
 * @Desc
 * @Date 2020/7/4
 */
@Controller
public class IndexController {

    @Autowired
    StudentMapper studentMapper;


    /**
     * 学生端首页映射
     * @return
     */
    @RequestMapping("/")
    public String login() {
        return "stu_login";
    }

    /**
     * 轮播图的载入
     */
    @RequestMapping("/toRotation")
    public String toRotation() {
        return "commons/rotationPicture";
    }

    /**
     * 跳转管理员登入
     * @return
     */
    @RequestMapping("/admin_login")
    public String admin_login() {
        return "surveyTeam/admin_login";
    }

    /**
     * 跳转学生端首页
     * @return
     */
    @RequestMapping("/toIndex")
    public String toIndex() {
        return "stu_index";
    }

    /**
     * 管理员登入
     * @param session
     * @param
     * @param
     * @param
     * @return
     */
    @PostMapping("/doAdminLogin")
    @ResponseBody
    public Map<String,Object> doAdminLogin(HttpSession session, String adminId, String adminPwd, String checkCode, String roleCk) {
        // 表单数据： adminId=admin&adminPwd=123456&checkCode=31&roleCk=3

        Map<String,Object> reMap = new HashMap<String,Object>();

        // 校验验证码
        String checkcode = (String) session.getAttribute("CHECKCODE_SERVER");
        session.removeAttribute("CHECKCODE_SERVER"); // 确保验证码一次性,匹配后从域中删除

        // 判断验证码是否正确
        if (!checkcode.equalsIgnoreCase(checkCode)) {
            // 验证码不正确
            // 提示信息
            reMap.put("status",2);
            reMap.put("msg","验证码不正确");
            return reMap;
        }

        // 判断登入角色
        switch (roleCk){
            case "1":
                // 超级管理员
                break;
            case "2":
                // 辅导员
                break;
            case "3":
                // 测评小组
                // 调用service查询
                TStudent loginSurvey = studentMapper.findStuByIdAndPwdAndRole(adminId, adminPwd);
                // 判断是否登入成功
                if (loginSurvey != null) {
                    //登入成功
                    //将用户存入session
                    session.setAttribute("loginSurvey", loginSurvey);
                } else {
                    reMap.put("status",0);
                    reMap.put("msg","账户密码错误或非法用户");
                    return reMap;
                }
                break;
        }
        reMap.put("status",1);
        reMap.put("msg","ok");
        return reMap;
    }

    /**
     * 学生端登入逻辑
     */
    @PostMapping("/doLogin")
    @ResponseBody
    public String doLogin(HttpSession session, String stuID, String stuPwd, String checkCode) {
        // 表单数据： stuID=1840129269&stuPwd=123456&checkCode=81

        // 校验验证码
        String checkcode = (String) session.getAttribute("CHECKCODE_SERVER");
        session.removeAttribute("CHECKCODE_SERVER"); // 确保验证码一次性,匹配后从域中删除

        // 判断验证码是否正确
        if (!checkcode.equalsIgnoreCase(checkCode)) {
            //验证码不正确
            //提示信息
            return "bad check code";
        }

        // 调用service查询
        TStudent loginUser = studentMapper.findStuByIdAndPwd(stuID, stuPwd);


        // 判断是否登入成功
        if (loginUser != null) {
            //登入成功
            //将用户存入session
            session.setAttribute("loginStu", loginUser);
           return "ok";
        } else {
            return "not find";
        }
    }

    /**
     * 注销登入
     * @param session
     * @return
     */
    @RequestMapping("/logOut")
    public String logOut(HttpSession session){
        // 清除session
        session.removeAttribute("loginStu");
        // 重定向到登入页
        return "redirect:/";
    }

    /**
     * 管理员注销登入
     * @param session
     * @return
     */
    @RequestMapping("/adminLogOut")
    public String adminLogOut(HttpSession session){
        // 清除session
        session.removeAttribute("loginSurvey");
        // 重定向到登入页
        return "redirect:/admin_login";
    }

    /**
     * 生成验证码
     * @param session
     * @param resp
     * @throws IOException
     */
    @RequestMapping("/getCode")
    public void getCode(HttpSession session, HttpServletResponse resp) throws IOException {
        //服务器通知浏览器不要缓存
        resp.setHeader("pragma", "no-cache");
        resp.setHeader("cache-control", "no-cache");
        resp.setHeader("expires", "0");

        //在内存中创建一个长80，宽30的图片，默认黑色背景
        //参数一：长
        //参数二：宽
        //参数三：颜色
        int width = 80;
        int height = 30;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        //获取画笔
        Graphics g = image.getGraphics();
        //设置画笔颜色为
        g.setColor(Color.gray);
        //填充图片
        g.fillRect(0, 0, width, height);


        int a = CheckCodeUtil.getA();
        int b = CheckCodeUtil.getB();

        //产生4个随机验证码，12Ey
        int sum = a + b;
        String checkCode = Integer.toString(sum);
        //将验证码放入HttpSession中
        session.setAttribute("CHECKCODE_SERVER", checkCode);


        //设置画笔颜色为黄色
        g.setColor(Color.black);
        //设置字体的小大
        g.setFont(new Font("黑体", Font.BOLD, 19));
        //向图片上写入验证码
        g.drawString(a + "+" + b + "=?", 15, 25);

        //将内存中的图片输出到浏览器
        //参数一：图片对象
        //参数二：图片的格式，如PNG,JPG,GIF
        //参数三：图片输出到哪里去
        ImageIO.write(image, "PNG", resp.getOutputStream());
    }
}
